// 1. 函数声明（具有函数提升）
greet(); // 可以在声明前调用
function greet() {
    console.log("你好，JavaScript!");
}

// 2. 函数表达式（没有提升）
const sayHello = function () {
    console.log("Hello, world!");
};
sayHello(); // 必须在定义后调用

// 3. 箭头函数（简洁，不绑定 this）
const add = (x, y) => x + y;
console.log(add(5, 3)); // 输出 8

// 4. 作用域链（变量从当前作用域向上查找）
function outerFunction() {
    let outerVar = "外部变量";
    function innerFunction() {
        console.log(outerVar); // 访问外部作用域的变量
    }
    innerFunction();
}
outerFunction(); // 输出 "外部变量"

// 5. 闭包（函数访问其外部作用域变量，即使作用域已结束）
function createCounter() {
    let count = 0;
    return function () {
        count++;
        console.log("计数:", count);
    };
}
const counter = createCounter();
counter(); // 计数: 1
counter(); // 计数: 2
counter(); // 计数: 3
